4  Mapas do Brasil com dados do IBGE

5 Usando shapefile

Neste capítulo iremos utilizar os dados do site do IBGE (https://www.ibge.gov.br/geociencias/organizacao-do-territorio/malhas-territoriais.html). Os dados encontram-se divididos em Municípios; Unidades da Federação; Microrregiões; Mesorregiões; Regiões Geográficas Imediatas e Regiões Geográficas Intermediárias. No site, você verá a seguinte tela:

Para acessar os shapes contendo os dados do Brasil e de seus estados, contendo as delimitações de cada um, você deve selecionar botão de Malha Municipal, destacado na página inicial acima. Ao selecionar Malha Municipal você verá a seguinte página.

Nesta página vamos fazer o download (destaque acima) dos dados de Municípios do Brasil. Ao baixar, na área de downloads você verá a pasta. Antes de utilizá-la você deverá descompactá-la com um programa para este fim de sua preferência. Após descompactar, mova a pasta com os arquivos de Municípios para a pasta de trabalho. A pasta contém os seguintes arquivos:

Os procedimentos apresentados até aqui valem para obtenção de outros conjuntos de dados de interesse dentro do site do IBGE.

Após a obtenção dos dados, podemos importá-los ao R e manipular esses dados.

5.1 Municípios

Vamos carregar os pacotes necessários:

library(tidyverse)
library(sf)
library(rnaturalearth)
library(rnaturalearthhires)
library(rnaturalearthdata)
library(png)
library(grid)
library(geobr)
library(tmap)
library(biscale) 
library(patchwork)

5.1.1 Importando dados

BR <- st_read("BR_Municipios_2022/BR_Municipios_2022.shp")
Reading layer `BR_Municipios_2022' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/BR_Municipios_2022/BR_Municipios_2022.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 5572 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -73.99045 ymin: -33.75118 xmax: -28.84764 ymax: 5.271841
Geodetic CRS:  SIRGAS 2000

5.1.2 Visualizando os dados

ggplot() + 
  geom_sf(data = BR)

5.2 Microrregiões

5.2.1 Importando dados

BR_micro <- st_read("BR_Microrregioes_2022/BR_Microrregioes_2022.shp")
Reading layer `BR_Microrregioes_2022' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/BR_Microrregioes_2022/BR_Microrregioes_2022.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 560 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -73.99045 ymin: -33.75118 xmax: -28.84764 ymax: 5.271841
Geodetic CRS:  SIRGAS 2000

5.2.2 Visualizando os dados

ggplot() + 
  geom_sf(data = BR_micro)

5.3 Mesorregiões

5.3.1 Importando dados

BR_meso <- st_read("BR_Mesorregioes_2022/BR_Mesorregioes_2022.shp")
Reading layer `BR_Mesorregioes_2022' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/BR_Mesorregioes_2022/BR_Mesorregioes_2022.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 139 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -73.99045 ymin: -33.75118 xmax: -28.84764 ymax: 5.271841
Geodetic CRS:  SIRGAS 2000

5.3.2 Visualizando os dados

ggplot() + 
  geom_sf(data = BR_meso)

5.4 Estado específico

5.4.1 Municípios

5.4.2 Importando dados

Minas <-st_read("MG_Municipios_2022/MG_Municipios_2022.shp")
Reading layer `MG_Municipios_2022' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/MG_Municipios_2022/MG_Municipios_2022.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 853 features and 4 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -51.04608 ymin: -22.92276 xmax: -39.85683 ymax: -14.23318
Geodetic CRS:  SIRGAS 2000

5.4.3 Visualizando os dados

ggplot() + 
  geom_sf(data = Minas)

5.4.4 Microrregiões

5.4.4.1 Importando dados

Minas_micro <- st_read("MG_Microrregioes_2022/MG_Microrregioes_2022.shp")
Reading layer `MG_Microrregioes_2022' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/MG_Microrregioes_2022/MG_Microrregioes_2022.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 66 features and 4 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -51.04608 ymin: -22.92276 xmax: -39.85683 ymax: -14.23318
Geodetic CRS:  SIRGAS 2000

5.4.4.2 Importando dados

ggplot() + 
  geom_sf(data = Minas_micro)

5.4.5 Mesorregiões

5.4.5.1 Importando dados

Minas_meso <- st_read("MG_Mesorregioes_2022/MG_Mesorregioes_2022.shp")
Reading layer `MG_Mesorregioes_2022' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/MG_Mesorregioes_2022/MG_Mesorregioes_2022.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 12 features and 4 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -51.04608 ymin: -22.92276 xmax: -39.85683 ymax: -14.23318
Geodetic CRS:  SIRGAS 2000

5.4.5.2 Importando dados

ggplot() + 
  geom_sf(data = Minas_meso)

5.4.6 Destacando regiões dentro de um Estado específico

5.4.6.1 Minas Gerais

# Viçosa
codigo_ibge <- 3171303 # Viçosa
codigo_ibge2 <- 3110202 # Cajuri
codigo_ibge3 <- 3169000 # Tocantins
codigo_ibge4 <- 3150802 # Piranga

# Região Lavras
codigo_ibge5 <- 3138203 # Lavras
codigo_ibge6 <- 3111200 # Campo Belo
codigo_ibge7 <- 3130309 # Iguatama
codigo_ibge8 <- 3113909 # Carmo da Cachoeira

# Filtrar apenas a cidade desejada
cidade <- Minas %>% filter(CD_MUN == 3171303)
cidade2 <- Minas %>% filter(CD_MUN == 3110202)
cidade3 <- Minas %>% filter(CD_MUN == 3169000)
cidade4 <- Minas %>% filter(CD_MUN == 3150802)
cidade5 <- Minas %>% filter(CD_MUN == 3138203)
cidade6 <- Minas %>% filter(CD_MUN == 3111200)
cidade7 <- Minas %>% filter(CD_MUN == 3130309)
cidade8 <- Minas %>% filter(CD_MUN == 3113909)

# Criar o mapa
ggplot() +
geom_sf(data = Minas) +
geom_sf(data = cidade, fill = "#7183de", color = "black") +
geom_sf(data = cidade2, fill = "#7183de", color = "black") +
geom_sf(data = cidade3, fill = "#7183de", color = "black") +
geom_sf(data = cidade4, fill = "#7183de", color = "black") +
geom_sf(data = cidade5, fill = "#7183de", color = "black") +
geom_sf(data = cidade6, fill = "#7183de", color = "black") +
geom_sf(data = cidade7, fill = "#7183de", color = "black") +
geom_sf(data = cidade8, fill = "#7183de", color = "black")

5.4.6.2 Alterando a cor das linhas

Neste exemplo iremos alterar as cores das linhas dos municípios de Barbacena, São João Del Rei e Lavras. Para isto utilizaremos a função “color”.

## Barbacena 
codigo_ibge <- 3105608 

## São João Del Rei 
codigo_ibge2 <- 3162500 

## Lavras 
codigo_ibge3 <- 3138203

# Filtrar apenas a cidade desejada 
cidade <- Minas %>% filter(CD_MUN == 3105608) 
cidade2 <- Minas %>% filter(CD_MUN == 3162500) 
cidade3 <- Minas %>% filter(CD_MUN == 3138203) 

# Criar o mapa 
ggplot() + 
  geom_sf(data = Minas) + 
  geom_sf(data = cidade, color = "red") + 
  geom_sf(data = cidade2, color = "blue") + 
  geom_sf(data = cidade3, color = "green")

Como podemos ver no mapa acima, destacamos Barbacena de vermelho, São João Del Rei de azul e Lavras de verde.

5.4.6.3 Plotando somente as regiões com cores das linhas que delimitam os municípios destacadas

Para isto basta retirar do código a função “geom_sf(data = Minas)”.

ggplot() + 
  geom_sf(data = cidade, color = "red") + 
  geom_sf(data = cidade2, color = "blue") + 
  geom_sf(data = cidade3, color = "green")

5.4.6.4 Plotando determinadas regiões dentro de Minas Gerais

# Região Viçosa 

codigo_ibge <- 3171303 # Viçosa 
codigo_ibge2 <- 3110202 # Cajuri 
codigo_ibge3 <- 3169000 # Tocantins 
codigo_ibge4 <- 3150802 # Piranga

# Filtrar apenas a cidade desejada 

cidade <- Minas %>% filter(CD_MUN == 3171303) 
cidade2 <- Minas %>% filter(CD_MUN == 3110202) 
cidade3 <- Minas %>% filter(CD_MUN == 3169000) 
cidade4 <- Minas %>% filter(CD_MUN == 3150802)

# Criar o mapa apenas para a região de interesse 

ggplot() + 
  geom_sf(data = cidade) + 
  geom_sf(data = cidade2) + 
  geom_sf(data = cidade3) + 
  geom_sf(data = cidade4)

# Região Lavras 

codigo_ibge5 <- 3138203 # Lavras 
codigo_ibge6 <- 3111200 # Campo Belo 
codigo_ibge7 <- 3130309 # Iguatama 
codigo_ibge8 <- 3113909 # Carmo da Cachoeira

# Filtrar apenas a cidade desejada 

cidade5 <- Minas %>% filter(CD_MUN == 3138203) 
cidade6 <- Minas %>% filter(CD_MUN == 3111200) 
cidade7 <- Minas %>% filter(CD_MUN == 3130309) 
cidade8 <- Minas %>% filter(CD_MUN == 3113909)

# Criar o mapa apenas para a região de interesse 

ggplot() + 
  geom_sf(data = cidade5) + 
  geom_sf(data = cidade6) + 
  geom_sf(data = cidade7) + 
  geom_sf(data = cidade8)

5.4.6.5 Destacando os munícipios com cores

Para isto utilizaremos a função “fill”. Neste exemplo iremos utilizar as mesmas cidades do exemplo anterior.

# Barbacena 

codigo_ibge <- 3105608 

# São João Del Rei 

codigo_ibge2 <- 3162500 

# Lavras 

codigo_ibge3 <- 3138203 

# Filtrar apenas a cidade desejada 

cidade <- Minas %>% filter(CD_MUN == 3105608) 
cidade2 <- Minas %>% filter(CD_MUN == 3162500) 
cidade3 <- Minas %>% filter(CD_MUN == 3138203) 

# Criar o mapa 

ggplot() +
  geom_sf(data = Minas) + 
  geom_sf(data = cidade, fill = "red") + 
  geom_sf(data = cidade2, fill = "blue") + 
  geom_sf(data = cidade3, fill = "green")

5.4.6.6 Plotando somente as regiões com cores dos municípios destacadas

ggplot() + 
  geom_sf(data = cidade, fill = "red") + 
  geom_sf(data = cidade2, fill = "blue") + 
  geom_sf(data = cidade3, fill = "green")

Nestas funções vistas acima, podemos também podemos integrar as duas funções, delimitando as linhas e cores de destaque iguais ou de cores diferentes entre elas.

5.4.6.7 Cores iguais entre as linhas e o destaque dos municípios

ggplot() + 
  geom_sf(data = cidade, fill = "red", color = "red") + 
  geom_sf(data = cidade2, fill = "blue", color = "blue") + 
  geom_sf(data = cidade3, fill = "green", color = "green")

5.4.6.8 Cores diferentes entre as linhas e o destaque dos municípios

ggplot() + 
  geom_sf(data = cidade, fill = "red", color = "black") + 
  geom_sf(data = cidade2, fill = "blue", color = "brown") + 
  geom_sf(data = cidade3, fill = "green", color = "orange")

5.5 Alterando o layout

5.5.1 Alterando o fundo através da função “theme”

São várias opções de temas prontas disponíveis, como:

theme_gray(): tema com fundo cinza e linhas de grade brancas, projetado para apresentar os dados e ainda facilitar as comparações.

theme_bw(): tema escuro sobre luz. Pode funcionar melhor para apresentações exibidas com um projetor.

theme_linedraw(): tema com apenas linhas pretas de várias larguras em fundos brancos, lembrando um desenho de linha.

theme_light(): tema com linhas e eixos cinza claro, para direcionar mais atenção para os dados.

theme_dark(): tema com fundo escuro, útil para fazer sobressair linhas finas coloridas.

theme_minimal(): tema minimalista sem anotações de fundo. theme_classic(): tema com linhas de eixo x e y e sem linhas de grade. tema_void(): tema completamente vazio.

5.5.2 Alterando o fundo manualmente

5.5.2.1 Importando imagens

imagem <- readPNG("Fundos/images.png")

5.5.2.2 Ajustando imagem ao mapa

fundo <- ggplot() + 
  annotation_custom(rasterGrob(imagem, width = unit(1, "npc"), height = unit(1, "npc"))) + 
  theme_void()

5.5.2.3 Criando o mapa e combinando arquivo de imagem

fundo +
  geom_sf(data = Minas)

5.5.2.4 Cores sólidas

# Definindo a cor

cor <- c("blue")
# Aplicando a cor ao fundo do mapa

fundo <- ggplot() +
  annotation_custom(rasterGrob(cor, width = unit(1, "npc"), height = unit(1, "npc"))) +
  theme_void()

# Criando o mapa e combinando arquivo que contém a cor
fundo +
  geom_sf(data = Minas)

6 Usando o pacote geobr

Para colorir os mapas que criaremos a seguir, iremos usar o código de cores hexadecimal.

O “pick color” é ideal para definir a cor desejada. Ao digitar este termo no Google você verá a seguinte janela.

Para selecionar a cor desejada, você pode utilizar o seletor de cores para um ajuste fino e posteriormente para utilizar a cor no software R, basta copiar o código da cor que se encontra na barra com o nome “HEX” na parte inferior.

6.1 País

brasil<-read_country(year=2018) 
estados <- read_state(year=2018)

ggplot() + 
  geom_sf(data=brasil,fill="#2D3E50", color="#FEBF57") + 
  geom_sf(data = estados, fill = NA, color = "orange")

6.2 Regiões

regioes<-read_region(year=2018) 

ggplot() + 
  geom_sf(data=regioes,fill="#2D3E50", color="#FEBF57")

6.3 Estados

6.3.1 Todos os estados

estados = read_state(code_state = "all", year = 2018) 
plot(estados)

ggplot() + 
  geom_sf(data = estados, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.3.2 Estado específico

rs = read_state(code_state = 43, year = 2018) 
plot(rs)

ggplot() + 
  geom_sf(data = rs, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.4 Municípios

6.4.1 Todos os municípios

municipios <- read_municipality(code_muni = "all", year = 2020)
plot(municipios)

ggplot() + 
  geom_sf(data = municipios, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.4.2 Município específico

vicosamg = read_municipality(code_muni = 3102100, year = 2020) 
plot(vicosamg)

ggplot() + 
  geom_sf(data = vicosamg, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.4.3 Municípios de um Estado específico

sc = read_municipality(code_muni = 42, year = 2020) 
plot(sc)

ggplot() + 
  geom_sf(data = sc, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.5 Mesorregiões

6.5.1 Todas as mesorregiões

meso = read_meso_region(code_meso = "all", year = 2020)
plot(meso)

ggplot() + 
  geom_sf(data = meso, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.5.2 Mesorregião específica

zonadamatamg = read_meso_region(code_meso = 12, year = 2020) 
plot(zonadamatamg)

ggplot() + 
  geom_sf(data = zonadamatamg, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.6 Microrregiões

6.6.1 Todas as microrregiões

micro = read_micro_region(code_micro = "all", year = 2020)
plot(micro)

ggplot() + 
  geom_sf(data = micro, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.6.2 Microrregiões em um Estado específico

mg = read_micro_region(code_micro = 31) 
plot(mg)

ggplot() + 
  geom_sf(data = mg, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = F)

6.7 Sobreposição

6.7.1 Sobrepondo um estado

br <- read_country(year=2018)

mg = read_state(code_state = 31)

ggplot() +
  geom_sf(data=br, fill="#2D3E50", color="#FEBF57")+
  geom_sf(data=mg, fill="#FEBF57")

6.7.2 Sobrepondo uma cidade

mg = read_state(code_state = 31) 

vicosa = read_municipality(code_muni = 3102100) 

ggplot() + 
  geom_sf(data = mg, fill="#2D3E50", color="#FEBF57") + 
  geom_sf(data = vicosa, fill = "#FEBF57")

6.8 Plotando dados

Iremos utilizar dados da Fundação Brasileira para o Desenvolvimento Sustentável. Acesse: http://geo.fbds.org.br.

Abra a pasta do Estado de seu interesse. Exemplo: AM (Amazonas).

Agora escolha um município. Exemplo: Alvaraes.

Nos nossos exemplos iremos utilizar informações de rios simples e de nascentes presentes na pasta “HIDROGRAFIA” e informações de uso do solo presente na pasta “USO”. Vamos clicar com o botão direito sobre o arquivo de interesse e em seguida copiar o link, pois iremos colá-lo no script do R posteriormente.

6.8.1 Rios simples

Inicialmente faremos o download dos rios simples de Uberlândia – MG disponíveis no site citado anteriormente no formato shp, acompanhado dos formatos dbf, prj e shx.

download.file(url = "http://geo.fbds.org.br/MG/UBERLANDIA/HIDROGRAFIA/MG_3170206_RIOS_SIMPLES.dbf", 
              destfile = ".MG_3170206_RIOS_SIMPLES.dbf", mode = "wb")
download.file(url = "http://geo.fbds.org.br/MG/UBERLANDIA/HIDROGRAFIA/MG_3170206_RIOS_SIMPLES.prj", 
              destfile = ".MG_3170206_RIOS_SIMPLES.prj", mode = "wb")
download.file(url = "http://geo.fbds.org.br/MG/UBERLANDIA/HIDROGRAFIA/MG_3170206_RIOS_SIMPLES.shp", 
              destfile = ".MG_3170206_RIOS_SIMPLES.shp", mode = "wb")
download.file(url = "http://geo.fbds.org.br/MG/UBERLANDIA/HIDROGRAFIA/MG_3170206_RIOS_SIMPLES.shx", 
              destfile = ".MG_3170206_RIOS_SIMPLES.shx", mode = "wb")

6.8.1.1 Importação de dados geoespaciais dos rios simples de Uberlândia - MG

rios <- st_read(".MG_3170206_RIOS_SIMPLES.shp") 
Reading layer `.MG_3170206_RIOS_SIMPLES' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/.MG_3170206_RIOS_SIMPLES.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 3048 features and 6 fields
Geometry type: LINESTRING
Dimension:     XY
Bounding box:  xmin: 728976 ymin: 7850977 xmax: 825605.5 ymax: 7942095
Projected CRS: SIRGAS 2000 / UTM zone 22S
plot(rios$geometry)

6.8.1.2 Importação de dados geoespaciais dos Municipios MG

muni_mg <- read_municipality(code_muni = 'MG', year = 2015)
muni_mg
Simple feature collection with 853 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -51.04594 ymin: -22.92276 xmax: -39.85727 ymax: -14.23333
Geodetic CRS:  SIRGAS 2000
First 10 features:
   code_muni           name_muni code_state abbrev_state
1    3100104 Abadia Dos Dourados         31           MG
2    3100203              Abaeté         31           MG
3    3100302          Abre Campo         31           MG
4    3100401             Acaiaca         31           MG
5    3100500             Açucena         31           MG
6    3100609            Água Boa         31           MG
7    3100708       Água Comprida         31           MG
8    3100807             Aguanil         31           MG
9    3100906      Águas Formosas         31           MG
10   3101003     Águas Vermelhas         31           MG
                             geom
1  MULTIPOLYGON (((-47.42967 -...
2  MULTIPOLYGON (((-45.1393 -1...
3  MULTIPOLYGON (((-42.31071 -...
4  MULTIPOLYGON (((-43.02387 -...
5  MULTIPOLYGON (((-42.36208 -...
6  MULTIPOLYGON (((-42.32271 -...
7  MULTIPOLYGON (((-47.98116 -...
8  MULTIPOLYGON (((-45.34247 -...
9  MULTIPOLYGON (((-40.80491 -...
10 MULTIPOLYGON (((-41.36426 -...
plot(muni_mg$geom, col = "gray")

6.8.1.3 Importação de dados geoespaciais de Uberlândia

ub_limit <- read_municipality(code_muni = 3170206, year = 2015)
ub_limit
Simple feature collection with 1 feature and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -48.82355 ymin: -19.4165 xmax: -47.90314 ymax: -18.5935
Geodetic CRS:  SIRGAS 2000
    code_muni  name_muni code_state abbrev_state                           geom
824   3170206 Uberlândia         31           MG MULTIPOLYGON (((-48.06139 -...
plot(ub_limit$geom, col = "gray")

6.8.1.4 Importação de dados geoespaciais dos municipios limitrofes de Uberlândia

tm_shape(muni_mg, bbox = ub_limit) +
  tm_polygons(col = "lightgrey") +
  tm_shape(ub_limit) +
  tm_borders(col = 'red')

6.8.1.5 Sobreposição de dados geoespaciais de Uberlândia

m1 <- tm_shape(muni_mg, bbox = ub_limit) +
  tm_polygons(col = "lightgrey") +
  tm_text('name_muni') +
  tm_shape(ub_limit) +
  tm_polygons(col = "darkgrey") +
  tm_text('name_muni') +
  tm_shape(rios) +
  tm_lines(col = "blue") +
  tm_scale_bar() +
  tm_layout(main.title = "Rios simples de Uberlândia - MG", legend.outside = T, main.title.position = 'center')

6.8.1.6 Salvando o mapa

tmap_save(m1, filename = "nas_ub.png")

6.8.2 Nascentes

Inicialmente faremos o download das nascentes do Rio de Janeiro – RJ disponíveis no site citado anteriormente no formato shp, acompanhado dos formatos dbf, prj e shx.

download.file(url = "http://geo.fbds.org.br/RJ/RIO_DE_JANEIRO/HIDROGRAFIA/RJ_3304557_NASCENTES.dbf", destfile = ".RJ_3304557_NASCENTES.dbf", mode = "wb")
download.file(url = "http://geo.fbds.org.br/RJ/RIO_DE_JANEIRO/HIDROGRAFIA/RJ_3304557_NASCENTES.prj", destfile = ".RJ_3304557_NASCENTES.prj", mode = "wb")
download.file(url = "http://geo.fbds.org.br/RJ/RIO_DE_JANEIRO/HIDROGRAFIA/RJ_3304557_NASCENTES.shp", destfile = ".RJ_3304557_NASCENTES.shp", mode = "wb")
download.file(url = "http://geo.fbds.org.br/RJ/RIO_DE_JANEIRO/HIDROGRAFIA/RJ_3304557_NASCENTES.shx", destfile = ".RJ_3304557_NASCENTES.shx", mode = "wb")

6.8.3 Importação de dados geoespaciais das nascentes do Rio de Janeiro - RJ

nas_rj <- st_read(".RJ_3304557_NASCENTES.shp")
Reading layer `.RJ_3304557_NASCENTES' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/.RJ_3304557_NASCENTES.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 1961 features and 5 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: 631785.5 ymin: 7449319 xmax: 688312.2 ymax: 7478840
Projected CRS: SIRGAS 2000 / UTM zone 23S
plot(nas_rj$geometry)

6.8.4 Importação de dados geoespaciais dos municípios do Rio de Janeiro - RJ

muni_rj <- read_municipality(code_muni = 'RJ', year = 2015)
muni_rj
Simple feature collection with 92 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -44.88932 ymin: -23.36893 xmax: -40.95852 ymax: -20.76323
Geodetic CRS:  SIRGAS 2000
First 10 features:
   code_muni          name_muni code_state abbrev_state
1    3300100     Angra Dos Reis         33           RJ
2    3300159            Aperibé         33           RJ
3    3300209           Araruama         33           RJ
4    3300225              Areal         33           RJ
5    3300233 Armação Dos Búzios         33           RJ
6    3300258    Arraial Do Cabo         33           RJ
7    3300308     Barra Do Piraí         33           RJ
8    3300407        Barra Mansa         33           RJ
9    3300456       Belford Roxo         33           RJ
10   3300506         Bom Jardim         33           RJ
                             geom
1  MULTIPOLYGON (((-44.35695 -...
2  MULTIPOLYGON (((-42.1159 -2...
3  MULTIPOLYGON (((-42.18249 -...
4  MULTIPOLYGON (((-43.04907 -...
5  MULTIPOLYGON (((-41.9443 -2...
6  MULTIPOLYGON (((-41.97302 -...
7  MULTIPOLYGON (((-43.74861 -...
8  MULTIPOLYGON (((-44.00564 -...
9  MULTIPOLYGON (((-43.32929 -...
10 MULTIPOLYGON (((-42.29376 -...
plot(muni_rj$geom, col = "gray")

6.8.5 Importação de dados geoespaciais do Rio de Janeiro - RJ

rj_limit <- read_municipality(code_muni = 3304557, year = 2015)
rj_limit
Simple feature collection with 1 feature and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -43.79654 ymin: -23.08289 xmax: -43.09911 ymax: -22.74605
Geodetic CRS:  SIRGAS 2000
   code_muni      name_muni code_state abbrev_state
68   3304557 Rio De Janeiro         33           RJ
                             geom
68 MULTIPOLYGON (((-43.55912 -...
plot(rj_limit$geom, col = "gray")

6.8.5.1 Importação de dados geoespaciais dos municipios limitrofes do Rio de Janeiro

tm_shape(muni_rj, bbox = rj_limit) +
  tm_polygons(col = "lightgrey") +
  tm_shape(rj_limit) +
  tm_borders(col = 'red')

6.8.5.2 Sobreposição de dados geoespaciais do Rio de Janeiro

m2 <- tm_shape(muni_rj, bbox = rj_limit) +
  tm_polygons(col = "lightgrey") +
  tm_text('name_muni') +
  tm_shape(rj_limit) +
  tm_polygons(col = "darkgrey") +
  tm_text('name_muni') +
  tm_shape(nas_rj) +
  tm_dots(col = "blue", size = .01) +
  tm_scale_bar() +
  tm_layout(main.title = "Nascentes do Rio de Janeiro - RJ", legend.outside = T, main.title.position = 'center')

6.8.5.3 Salvando o mapa

tmap_save(m2, filename = "nas_rj.png")

6.8.6 Uso do solo

Inicialmente faremos o download do uso do solo de Goiânia – GO disponíveis no site citado anteriormente no formato shp, acompanhado dos formatos dbf, prj e shx.

download.file(url = "http://geo.fbds.org.br/GO/GOIANIA/USO/GO_5208707_USO.dbf",
destfile = ".GO_5208707_USO.dbf", mode = "wb")
download.file(url = "http://geo.fbds.org.br/GO/GOIANIA/USO/GO_5208707_USO.prj",
destfile = ".GO_5208707_USO.prj", mode = "wb")
download.file(url = "http://geo.fbds.org.br/GO/GOIANIA/USO/GO_5208707_USO.shp",
destfile = ".GO_5208707_USO.shp", mode = "wb")
download.file(url = "http://geo.fbds.org.br/GO/GOIANIA/USO/GO_5208707_USO.shx",
destfile = ".GO_5208707_USO.shx", mode = "wb")

6.8.7 Importação de dados geoespaciais de uso do solo de Goiânia - GO

uso_solo_go <- st_read(".GO_5208707_USO.shp")
Reading layer `.GO_5208707_USO' from data source 
  `/Users/gabrielpaiva/Library/CloudStorage/GoogleDrive-gabriel.f.paiva@ufv.br/.shortcut-targets-by-id/1NnvJezUhOSk-Ea_iSxKgc0LZHts4UxSg/Inova Data/Ebooks/Mapas/Mapas/.GO_5208707_USO.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 5743 features and 6 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 665578.6 ymin: 8138326 xmax: 705050.2 ymax: 8180040
Projected CRS: SIRGAS 2000 / UTM zone 22S
plot(uso_solo_go$geometry)

6.8.8 Municipios GO

muni_go <- read_municipality(code_muni = 'GO', year = 2015) 
muni_go 
Simple feature collection with 246 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -53.25121 ymin: -19.49862 xmax: -45.90697 ymax: -12.39576
Geodetic CRS:  SIRGAS 2000
First 10 features:
   code_muni             name_muni code_state abbrev_state
1    5200050       Abadia De Goiás         52           GO
2    5200100             Abadiânia         52           GO
3    5200134               Acreúna         52           GO
4    5200159             Adelândia         52           GO
5    5200175    Água Fria De Goiás         52           GO
6    5200209            Água Limpa         52           GO
7    5200258 Águas Lindas De Goiás         52           GO
8    5200308              Alexânia         52           GO
9    5200506              Aloândia         52           GO
10   5200555        Alto Horizonte         52           GO
                             geom
1  MULTIPOLYGON (((-49.38399 -...
2  MULTIPOLYGON (((-48.61296 -...
3  MULTIPOLYGON (((-50.2453 -1...
4  MULTIPOLYGON (((-50.13909 -...
5  MULTIPOLYGON (((-47.4784 -1...
6  MULTIPOLYGON (((-48.76536 -...
7  MULTIPOLYGON (((-48.28166 -...
8  MULTIPOLYGON (((-48.40972 -...
9  MULTIPOLYGON (((-49.41169 -...
10 MULTIPOLYGON (((-49.43437 -...
plot(muni_go$geom, col = "gray")

6.8.9 Goiânia

goiania_limit <- read_municipality(code_muni = 5208707, year = 2015) 
goiania_limit 
Simple feature collection with 1 feature and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -49.44692 ymin: -16.83181 xmax: -49.07802 ymax: -16.45367
Geodetic CRS:  SIRGAS 2000
   code_muni name_muni code_state abbrev_state                           geom
95   5208707   Goiânia         52           GO MULTIPOLYGON (((-49.17669 -...
plot(goiania_limit$geom, col = "gray")

6.8.10 Goiânia com municipios limitrofes

tm_shape(muni_go, bbox = goiania_limit) + 
  tm_polygons(col = "lightgrey") + 
  tm_shape(goiania_limit) + 
  tm_borders(col = 'red')

6.8.10.1 Sobreposição de dados geoespaciais de Goiânia

m3 <- tm_shape(muni_go, bbox = goiania_limit) + 
  tm_polygons(col = "lightgrey") + 
  tm_text('name_muni') + 
  tm_shape(goiania_limit) + 
  tm_polygons(col = "darkgrey") + 
  tm_text('name_muni') + 
  tm_shape(uso_solo_go) + 
  tm_fill("CLASSE_USO", palette = "Set3", title = "Uso do Solo") + 
  tm_scale_bar() + 
  tm_layout(main.title = "Uso do Solo de Goiânia - GO", legend.outside = T, main.title.position = 'center')

6.8.10.2 Salvando o mapa

tmap_save(m3, filename = "map_goiania_uso_solo.png")

6.9 Mapas bivariados

Para criar mapas bivariados, vamos utilizar dados encontrados em: https://datasus.saude.gov.br/informacoes-de-saude-tabnet/.

Vamos fazer o download de tabelas csv da aba “DEMOGRÁFICAS E SOCIOECONÔMICAS”.

Vamos fazer o download dos dados de taxa de analfabetismo do Estado do Maranhão como exemplo. Primeiro, clicaremos no tópico Educação. Na nova janela, marcaremos a caixa “Taxa de analfabetismo” e na caixa de Abrangência Geográfica selecionaremos “Maranhão”.

Na janela seguinte, clicaremos em “mostra”.

Na nova janela, rolaremos até em baixo e clicaremos em “COPIA COMO .CSV” para fazer o download.

Vamos abrir o arquivo .csv na pasta de downloads e excluir as linhas de texto no início e no final da tabela, além de retirar os acentos presentes nos títulos das colunas (exemplo: acento no nome município).

6.9.1 Exemplo 1: Dados de taxa de analfabetismo e de PIB per capita do Estado de Minas Gerais

Inicialmente, vamos carregar os dados já editados, separar os códigos do nome do município em cada tabela e em seguida juntar em uma única tabela o código do município e as duas variáveis em estudo.

dado1 <- read.csv("ibge_censo_cnv_alfmg224312167_249_144_152.csv", sep = ";")
head(dado1)
                   Municipio Taxa_de_analfabetismo
1 310010 ABADIA DOS DOURADOS                   7.9
2              310020 ABAETE                   8.0
3          310030 ABRE CAMPO                  12.0
4             310040 ACAIACA                  14.3
5             310050 ACUCENA                  21.2
6            310060 AGUA BOA                  25.3
dado2 <- read.csv("ibge_cnv_pibmu224731167_249_144_152.csv", sep = ";")
dado2$PIB_per_capita <- gsub(",", ".", dado2$PIB_per_capita)
head(dado2)
                   Municipio PIB_per_capita
1 310010 ABADIA DOS DOURADOS       20033.50
2              310020 ABAETE       13180.02
3          310030 ABRE CAMPO        9972.90
4             310040 ACAIACA        7573.63
5             310050 ACUCENA        6269.22
6            310060 AGUA BOA        7139.76
dado1$code_muni <- substr(dado1$Municipio, 1, 6)
dado1$Municipio <- NULL
head(dado1)
  Taxa_de_analfabetismo code_muni
1                   7.9    310010
2                   8.0    310020
3                  12.0    310030
4                  14.3    310040
5                  21.2    310050
6                  25.3    310060
dado2$code_muni <- substr(dado2$Municipio, 1, 6)
dado2$Municipio <- NULL
head(dado2)
  PIB_per_capita code_muni
1       20033.50    310010
2       13180.02    310020
3        9972.90    310030
4        7573.63    310040
5        6269.22    310050
6        7139.76    310060
dados <- merge(dado1, dado2, by = "code_muni")
head(dados)
  code_muni Taxa_de_analfabetismo PIB_per_capita
1    310010                   7.9       20033.50
2    310020                   8.0       13180.02
3    310030                  12.0        9972.90
4    310040                  14.3        7573.63
5    310050                  21.2        6269.22
6    310060                  25.3        7139.76
dados$code_muni <- as.numeric(dados$code_muni)
dados$PIB_per_capita <- as.numeric(dados$PIB_per_capita)

Agora vamos carregar os dados dos municípios e do Estado de Minas Gerais:

muni.mg <- read_municipality(code_muni = 31)
mg <- read_state(31)

Vamos remover o último caractere do código do município dos dados muni.mg, para ficar igual o código da tabela dados:

muni.mg$code_muni <- substr(muni.mg$code_muni, 1, 
                            nchar(muni.mg$code_muni) - 1)
muni.mg$code_muni <- as.numeric(muni.mg$code_muni)

Vamos juntar as tabelas muni.mg e dados pelo código do município:

dados.juntos <- full_join(muni.mg, dados, by='code_muni')

Vamos criar uma classificação bivariada, que é uma maneira de categorizar os dados em duas variáveis simultaneamente:

dados.bi <- bi_class(dados.juntos, x = Taxa_de_analfabetismo,
                                   y = PIB_per_capita, style = 'equal', dim = 4)
head(dados.bi)
Simple feature collection with 6 features and 7 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -47.67975 ymin: -20.45584 xmax: -42.04516 ymax: -17.7664
Geodetic CRS:  SIRGAS 2000
  code_muni           name_muni code_state abbrev_state Taxa_de_analfabetismo
1    310010 Abadia Dos Dourados         31           MG                   7.9
2    310020              Abaeté         31           MG                   8.0
3    310030          Abre Campo         31           MG                  12.0
4    310040             Acaiaca         31           MG                  14.3
5    310050             Açucena         31           MG                  21.2
6    310060            Água Boa         31           MG                  25.3
  PIB_per_capita                           geom bi_class
1       20033.50 MULTIPOLYGON (((-47.48345 -...      1-1
2       13180.02 MULTIPOLYGON (((-45.24166 -...      1-1
3        9972.90 MULTIPOLYGON (((-42.49664 -...      2-1
4        7573.63 MULTIPOLYGON (((-43.12231 -...      2-1
5        6269.22 MULTIPOLYGON (((-42.38168 -...      3-1
6        7139.76 MULTIPOLYGON (((-42.41357 -...      3-1

Vamos plotar o mapa e a legenda, e em seguida uni-los:

mapa <- ggplot() +
  geom_sf (data = dados.bi,
                  aes(fill = bi_class),
                  col = alpha('grey',.2),
                  show.legend = FALSE) + 
  bi_scale_fill(pal = 'DkViolet2', dim = 4)

legenda <- bi_legend(pal = 'DkViolet2',
                     xlab = "Taxa de analfabetismo",
                     ylab = "PIB per capita", size = 10)
                     
mapa + inset_element(legenda, left = 0.002, right = 0.33,
                                     bottom = 0.5, top = 0.995)

6.9.2 Exemplo 2: Dados de renda média domiciliar per capita e taxa de desemprego do Estado de São Paulo

dado1 <- read.csv("ibge_censo_cnv_ren103314167_249_144_148.csv", sep = ";")
dado1$Renda_media_domic._per_capita <- gsub(",", ".", dado1$Renda_media_domic._per_capita)
head(dado1)
                      Municipio Renda_media_domic._per_capita
1             350010 ADAMANTINA                        963.25
2                 350020 ADOLFO                        640.44
3                  350030 AGUAI                        625.51
4         350040 AGUAS DA PRATA                        846.96
5       350050 AGUAS DE LINDOIA                        703.69
6 350055 AGUAS DE SANTA BARBARA                        797.97
dado2 <- read.csv("ibge_censo_cnv_desem103405167_249_144_148.csv", sep = ";")
dado2$Taxa_de_desemprego_16a_e. <- gsub(",", ".", dado2$Taxa_de_desemprego_16a_e.)
head(dado2)
                      Municipio Taxa_de_desemprego_16a_e.
1             350010 ADAMANTINA                      5.92
2                 350020 ADOLFO                      6.42
3                  350030 AGUAI                      6.59
4         350040 AGUAS DA PRATA                      6.49
5       350050 AGUAS DE LINDOIA                      3.59
6 350055 AGUAS DE SANTA BARBARA                      2.87
dado1$code_muni <- substr(dado1$Municipio, 1, 6)
dado1$Municipio <- NULL
head(dado1)
  Renda_media_domic._per_capita code_muni
1                        963.25    350010
2                        640.44    350020
3                        625.51    350030
4                        846.96    350040
5                        703.69    350050
6                        797.97    350055
dado2$code_muni <- substr(dado2$Municipio, 1, 6)
dado2$Municipio <- NULL
head(dado2)
  Taxa_de_desemprego_16a_e. code_muni
1                      5.92    350010
2                      6.42    350020
3                      6.59    350030
4                      6.49    350040
5                      3.59    350050
6                      2.87    350055
dados <- merge(dado1, dado2, by = "code_muni")
head(dados)
  code_muni Renda_media_domic._per_capita Taxa_de_desemprego_16a_e.
1    350010                        963.25                      5.92
2    350020                        640.44                      6.42
3    350030                        625.51                      6.59
4    350040                        846.96                      6.49
5    350050                        703.69                      3.59
6    350055                        797.97                      2.87

Agora vamos carregar os dados dos municípios e do Estado de São Paulo:

muni.sp <- read_municipality(code_muni = 35)
sp <- read_state(35)

Vamos remover o último caracter do código do município dos dados muni.mg, para ficar igual o código da tabela dados:

muni.sp$code_muni <- substr(muni.sp$code_muni, 1, 
                            nchar(muni.sp$code_muni) - 1)
muni.sp$code_muni <- as.numeric(muni.sp$code_muni)
dados$code_muni <- as.numeric(dados$code_muni)

Vamos juntar as tabelas muni.mg e dados pelo código do município:

dados.juntos <- full_join(muni.sp, dados, by='code_muni')
dados.juntos$Renda_media_domic._per_capita <- as.numeric(dados.juntos$Renda_media_domic._per_capita)
dados.juntos$Taxa_de_desemprego_16a_e. <- as.numeric(dados.juntos$Taxa_de_desemprego_16a_e.)

Vamos criar uma classificação bivariada, que é uma maneira de categorizar os dados em duas variáveis simultaneamente:

dados.bi <- bi_class(dados.juntos, x = Renda_media_domic._per_capita,
                     y = Taxa_de_desemprego_16a_e., style = 'equal', dim = 4)
head(dados.bi)
Simple feature collection with 6 features and 7 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -51.17838 ymin: -23.03648 xmax: -46.54881 ymax: -21.19701
Geodetic CRS:  SIRGAS 2000
  code_muni              name_muni code_state abbrev_state
1    350010             Adamantina         35           SP
2    350020                 Adolfo         35           SP
3    350030                  Aguaí         35           SP
4    350040         Águas Da Prata         35           SP
5    350050       Águas De Lindóia         35           SP
6    350055 Águas De Santa Bárbara         35           SP
  Renda_media_domic._per_capita Taxa_de_desemprego_16a_e.
1                        963.25                      5.92
2                        640.44                      6.42
3                        625.51                      6.59
4                        846.96                      6.49
5                        703.69                      3.59
6                        797.97                      2.87
                            geom bi_class
1 MULTIPOLYGON (((-51.09093 -...      2-2
2 MULTIPOLYGON (((-49.69668 -...      1-2
3 MULTIPOLYGON (((-47.01254 -...      1-2
4 MULTIPOLYGON (((-46.73069 -...      2-2
5 MULTIPOLYGON (((-46.635 -22...      1-1
6 MULTIPOLYGON (((-49.28903 -...      2-1

Vamos plotar o mapa e a legenda, e em seguida uni-los:Vamos plotar o mapa e a legenda, e em seguida uni-los:

mapa <- ggplot() +
  geom_sf (data = dados.bi,
                  aes(fill = bi_class),
                  col = alpha('grey',.2),
                  show.legend = FALSE) + 
  bi_scale_fill(pal = 'PinkGrn', dim = 4)

legenda <- bi_legend(pal = 'PinkGrn',
                     xlab = "Renda média per capita",
                     ylab = "Taxa de desemprego", size = 10)

mapa + inset_element(legenda, left = 0.002, 
                     right = 0.2,
                     bottom = 0.25, 
                     top = 0.111)